package com.hd.service.sys;

import com.hd.entity.sys.User;
import com.hd.util.result.PageInfo;

import java.io.Serializable;
import java.util.List;

/**
 * Created by Administrator on 2016/4/2.
 */
public interface UserService {
	Serializable insert(User user);

	User selectVoById(String id);

	void update(User user);

	void selectDataGrid(PageInfo pageInfo, User user);

	void deleteUserById(String id);

	User getUserByUsernameAndPassword(User user);

	List<User> selectByLoginName(User user);

	User selectById(String userId);

	List<User> selectByUsername(String username);

	void updatePwdByUserId(String userId, String hex);
	

	void save(User user);

	List<User> findByOrgAndStatus();

	User get(String id);

	/**
	 * 根据ids集合查询用户
	 * @param ids
	 * @return
	 */
	List<User>getUserByIds(String ids);
	User findByPhone(String phone);

	/**
	 * 注销用户
	 * @param id
	 */
	void cancel(String id);

    /**
     * 添加用户并[同步其他数据库]
     * <ul>
     * <li>step 1: 保存系统用户，同时设置和部门的关系</li>
     * <li>step 2: 同步用户信息到activiti的identity.User，同时设置角色</li>
     * </ul>
     *
     * @param user              用户对象
     * @param roleIdList        角色ID集合
     * @param synToActiviti
     * 是否同步到Activiti数据库，通过配置文件方式设置，使用属性：account.user.add.syntoactiviti
     * @throws  Exception                       其他未知异常
     */
    public void doAdd(User user, List<String> roleIdList, boolean synToActiviti) throws Exception;

	/**
	 * 编辑用户[同步其他数据库]
	 * @param user
	 * @param roleIdList
	 * @param synToActiviti
	 * @throws Exception
	 */
    public void doUpdate(User user, List<String> roleIdList, boolean synToActiviti) throws Exception;
    /**
     * 删除用户
     * @param userId        用户ID
     * @param synToActiviti
     * 是否同步到Activiti数据库，通过配置文件方式设置，使用属性：account.user.add.syntoactiviti
     * @throws Exception
     */
    public void doDelete(String userId, boolean synToActiviti) throws Exception;
    /**
     * 批量删除用户
     * @param ids      用户IDs
     * @param synToActiviti
     * 是否同步到Activiti数据库，通过配置文件方式设置，使用属性：account.user.add.syntoactiviti
     * @throws Exception
     */
    public void doDeleteBatch(String ids, boolean synToActiviti) throws Exception;

    /**
     * 同步用户、角色数据到工作流
     * @throws Exception
     */
    public void synAllUserAndRoleToActiviti() throws Exception;
    /**
     * 删除工作流引擎Activiti的用户、角色以及关系
     * @throws Exception
     */
    public void deleteAllActivitiIdentifyData() throws Exception;

    /**
     * 查询所有用户
     * @return
     */
	List<User> finAll();
	/**
	 * 通过姓名查询用户
	 * @param name
	 * @return
	 */
	List<User> findUsersByName(String name);
	List<User>getByIds(String ids);
	/**
	 * 按职位查询用户
	 * @param positionId
	 * @return
	 */
	List<User>findByPositionId(String positionId);
	/**
	 * 通过角色ID查询用户
	 * @param roleIds
	 * @return
	 */
	List<User>findByRoleIds(String roleIds);

	/**
	 *
	 * 修改用户信息
	 * @param user
	 */
	void updatePersonalInfo(User user);
}
